package src.tarea1;

import java.util.ArrayList;
import java.util.List;

public class PruebaSerie{
	
	private int [][] frec2d;
	private List <Double> arrayDatos;
	private double chiCuad;
	private int numClases;
	private double tamañoClases;
	private List <Clase> arrayClases;
	
	public PruebaSerie(List <Double> datosIn)
	{
		this.arrayDatos=datosIn;
		numClases=(int)Math.round(Math.sqrt(Math.sqrt((double)datosIn.size())));
		chiCuad=0.0;
		
		//Instanciando List's
		//
		arrayClases = new ArrayList(numClases);
		frec2d = new int [numClases][numClases];
		
		//Determinando limites clases
		//
		tamañoClases=1/(double)numClases;
		System.out.println("Numero de clases = "+numClases);
		System.out.println("Tamaño de clases = "+tamañoClases);
                
		double cotInf=0;
		double cotSup=tamañoClases;
		
		for (int i=0; i<numClases; i++)
		{
			arrayClases.add(new Clase(cotInf,cotSup));
			cotInf+=tamañoClases;
			cotSup+=tamañoClases;
//			System.out.println(arrayClases.get(i).toString());
		}
	}
	
	public void contarFrecuencias()
	{
		int coordX=0;
		int coordY=0;
		
		for (int i=0; i<arrayDatos.size(); i=i+2)
		{
			coordX=determinarInterv(arrayDatos.get(i));
			coordY=determinarInterv(arrayDatos.get(i+1));
			frec2d[coordX][coordY]++;
		}
	}
	
	public int determinarInterv(double dato)
	{
		Clase claseTmp=arrayClases.get(0);
		int numInt=0;
		
		while (!claseTmp.pertenece(dato))
		{
			numInt++;
			claseTmp=arrayClases.get(numInt);
		}
		
//		System.out.println("Dato= "+dato+" "+ "Intervalo= "+numInt);
		return numInt;
	}
        
        public void imprimirTablaFreq(){
            int cont=0;
            int suma=0;
            for (int[] is : frec2d) {
                for (int i : is) {
                    System.out.print(i);
                    if(cont<numClases) System.out.print(", ");
                    cont++;
                    suma+=i;
                }
                System.out.println();
                cont=0;
            }
            
            System.out.println("Suma de frecuencias: "+suma);
        }
	
	public void calcularChi()
	{
		double probTeor=(double)1/(double)(numClases*numClases);
		int frecEsp=(int)(((double)arrayDatos.size()/2.0)*probTeor);
		double chiTmp=0;
                int difTmp=0;
                
		for(int i=0; i<numClases; i++)
		{
			for(int j=0; j<numClases; j++)
			{
                            difTmp=frecEsp-frec2d[i][j];
//                            System.out.println("DifTmp= "+difTmp);
                            chiTmp+=(Math.pow((double)difTmp,2.0)/(double)frecEsp);
			}
		}
                chiCuad= chiTmp;
	}

    public double getChiCuad() {
        return chiCuad;
    }

}
